package se.webbzon.boltzmann.game.object.waypoint;

import javax.vecmath.Point3d;

import se.webbzon.boltzmann.game.npc.WalkingDuty;
import se.webbzon.boltzmann.npc.AbstractNPC;
import se.webbzon.boltzmann.npc.NPCDuty;

public class NPCDirection extends AbstractDirection {
	
	// The old duty of the non-player character
	private NPCDuty oldDuty;

	/*============================================================
	Constructors
	============================================================*/
	
	public NPCDirection(AbstractNPC npc, Waypoint start) {
		super(npc, start);
	}
	
	/*============================================================
	Public Methods
	============================================================*/
	
	@Override public AbstractNPC getDirectionTaker() {
		return (AbstractNPC) super.getDirectionTaker();
	}
	
	/*============================================================
	Protected Methods
	============================================================*/

	@Override protected void moveTo(Point3d position) {
		AbstractNPC npc = getDirectionTaker();
		WalkingDuty duty = new WalkingDuty(npc, 0, 0);
		npc.forceDuty(duty);
		duty.setTarget(position.getX(), position.getZ(), npc.getWalkSpeed());
	}

	@Override protected void onBegin() {
		AbstractNPC npc = getDirectionTaker();
		oldDuty = npc.getDuty();
	}

	@Override protected void onEnd() {
		AbstractNPC npc = getDirectionTaker();
		npc.forceDuty(oldDuty);
	}

}
